import Ioredis from 'ioredis'

/* 连接redis */
const redis1 = new Ioredis({
  host: '127.0.0.1', //ip
  port: 6379, //端口
})
/* 1字符串 */
//存储字符串并且设置过期时间
redis1.setex('key', 10, 'value')
//普通存储
redis1.set('key', 'value')
//读取
redis1.get('key')

/* 2集合 */
// 添加元素到集合
redis1.sadd('myset', 'element1', 'element2', 'element3')

// 从集合中移除元素
redis1.srem('myset', 'element2')

// 检查元素是否存在于集合中
redis1.sismember('myset', 'element1').then(result => {
  console.log('Is member:', result) // true
})

// 获取集合中的所有元素
redis1.smembers('myset').then(members => {
  console.log('Members:', members)
})

/* 3哈希 */
// 设置哈希字段的值
redis1.hset('myhash', 'field1', 'value1')
redis1.hset('myhash', 'field2', 'value2')

// 获取哈希字段的值
redis1.hget('myhash', 'field1').then(value => {
  console.log('Value:', value) // "value1"
})

// 删除哈希字段
redis1.hdel('myhash', 'field2')

// 获取整个哈希对象
redis1.hgetall('myhash').then(hash => {
  console.log('Hash:', hash) // { field1: 'value1' }
})

/* 4队列 */
// 在队列的头部添加元素
redis1.lpush('myqueue', 'element1')
redis1.lpush('myqueue', 'element2')

// 获取队列中所有元素
redis1.lrange('myqueue', 0, -1).then(elements => {
  console.log('Queue elements:', elements)
})
//获取长度
redis1.llen('myqueue').then(length => {
  console.log('Queue length:', length)
})

/* 5订阅发布 */
// 创建另一个 Redis 连接实例
const redis2 = new Ioredis()

// 订阅频道 'channel'
redis1.subscribe('channel')

// 监听消息事件
redis1.on('message', (channel, message) => {
  console.log(`Received a message from channel ${channel}: ${message}`)
})

// 发布消息到频道 'channel'
redis2.publish('channel', 'hello world')
